package enemies.factory.builders;



import mapControl.GraphicsMapControl;

import com.jme.scene.Node;

import elementos.Player;
import enemies.Enemy;

/**
 * Clase abstracta creadora de enemigos 
 * @author Sebastian Giulietti 69032 
 * @author Adrian Sanchez 64251
 */
public abstract class EnemyBuilder {
	
	//Enemigo a ser creado
	protected Enemy enemy;
	
	//Controlador del mapa
	protected GraphicsMapControl mapControl;
	
	//Objeto que representa al jugador
	protected Player player;

	/**
	 *Asigna una estrategia que usaran los enemigos que sean creados despues 
	 */
	public abstract void asignarEstrategia();

	
	/**
	 * Construye un modelo del enemigo 
	 */
	public abstract void buildModel();

	/**
	 * Crea una textura para el enemigo 
	 */
	public abstract void buildTexture();

	/** Crea un nuevo enemigo
	 * @param mapControl control del mapa
	 * @param player jugador
	 */
	public void createNewEnemyProduct(GraphicsMapControl mapControl,
			Player player) {
		enemy = new Enemy(mapControl);
		this.player = player;

		enemy.setNode(new Node());
		this.mapControl = mapControl;

		mapControl.getRootNode().attachChild(enemy.getNode());
		mapControl.getRootNode().updateRenderState();

	}
	/** Retorna el enemigo creado
	 * @return enemy
	 */
	public Enemy getEnemy() {
		return enemy;

	}

	/**
	 * Ubica al enemigo en el mapa 
	 */
	public abstract void locate();

	/**
	 * Le asigna un nombre y un puntaje al enemigo 
	 */
	public abstract void setName();

}
